/*
1：下载axios
2:导入axios
3:创建axios副本，设置它的基地址
4：设置axios副本的请求拦截与响应拦截
5：暴露
6：在api中导入使用
*/
import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
const _axios = axios.create({
  // 本地接口基址（本地已配制好的使用）：http://localhost:3000/api
  // 在线接口基地址：http://119.91.150.211:3000/api
  // 如果开发环境使用 http://localhost:3000/api  如果生产环境使用http://119.91.150.211:3000/api
  baseURL: process.env.VUE_APP_URL
})
// 请求拦截
_axios.interceptors.request.use(
  (config) => {
    // 统一token处理
    /*
    1：接口不需要token加了不报错
     config.headers.Authorization = `Bearer ${store.state.user.token}`
    2：不需要的你加了直接报错
       if(需要加的){
        config.headers.Authorization = `Bearer ${store.state.user.token}`
       }
    */
    config.headers.Authorization = `Bearer ${store.state.user.token}`

    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)
// 响应拦截
_axios.interceptors.response.use(
  // 成功：状态码2开头
  (res) => {
    // 统一错误处理
    if (res.data.success) {
      return res.data
    } else {
      // alert(res.data.message)
      Message.error(res.data.message)
      // 抛出一个错误：中止.then执行，直接执行catch
      return Promise.reject(new Error(res.data.message))
    }
  },
  // 失败：非2开头
  (error) => {
    console.dir(error)
    if (error.response && error.response.status === 401) {
      // 清除token
      // 跳转到登陆页
      store.commit('user/logout')
      // 提示
      Message.error(error.response.data.message)
    }
    return Promise.reject(error)
  }
)
export default _axios
